// utils/request.js

// 引入基础路径配置
import config from '@/config/config'

/**
 * 封装一个基础路径的 request 请求，并导出
 * @param {*} options: {
 *    url: 请求路径，由基础路径+url拼接而成
 *    aurl: 请求完整路径，优先级大于 url,
 *    method: 请求方式,
 *    data: 请求参数,
 * }
 */
const request = (options) => {
  let res = wx.getStorageSync('token')
  let token = res ? res : null
  if (!options.header) {
    options.header = {
      // 默认，一般不用改
      'content-type': "application/x-www-form-urlencoded",
      // 'Authorization': "Bearer " + token, // 携带token
      'token': token // 携带token
    }
  } else {
    options.header = {
      // 默认，一般不用改
      'content-type': options.header.contentType,
      // 'Authorization': "Bearer " + token, // 携带token
      'token': token // 携带token
    }
  }

  // 用 Promise 做链式调用封装
  return new Promise((resolve, reject) => {
    // 限制某个接口不加loading
    // let noLoadingUrl = ['familyMember/searchBox', 'houseInfo/myHouse', 'communityAnnouncement/myAnnouncement']
    // let bol = noLoadingUrl.some(item => item == options.url)
    // if (!bol) {
    //   wx.showLoading({ title: '加载中' })
    // }

    wx.showLoading({ title: '加载中' })

    wx.request({
      // 若直接给完整路径 aurl 则直接使用完整路径，否则使用标准的基础路径 apiUrl + 请求路径 url 拼接
      url: options.aurl || config.baseUrl + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: options.header,
      responseType: options.responseType || "",
      timeout: 8000,
      success(res) {
        if (res.statusCode === 200) {
          if (res.data.status == 200 && res.data?.error == 'OK' && res.data?.message == 'token 无效，请重新获取') {
            console.log('token失效');
            wx.showToast({
              title: 'token失效',
              icon: 'error',
              duration: 1000
            })
            wx.reLaunch({ url: '/pages/empower/empower' })
          } else {
            // 成功数据
            resolve(res.data);
            // 关闭 loading
            wx.hideLoading()
          }

        } else {
          // 失败信息
          console.log(res.errMsg, 'res.errMsg');
          // 关闭 loading
          wx.hideLoading()
          wx.showToast({
            title: '请求失败',
            icon: 'error',
            duration: 1000
          })
        }
      },
      fail(res) {
        // 失败
        reject(res);
        wx.showToast({
          title: '请求失败',
          icon: 'error',
          duration: 1000
        })
      }
    })

  })
}

export default request
